SELECT
Section: System Calls (2)
Index
Return to Main Contents
BSD mandoc
BSD 4.2
NAME
select
- synchronous I/O multiplexing
SYNOPSIS
Fd #include <sys/types.h>
Fd #include <sys/time.h>
Fd #include <unistd.h>
Ft int
Fn select int nfds fd_set *readfds fd_set *writefds fd_set *exceptfds struct timeval *timeout
Fn FD_SET fd &fdset
Fn FD_CLR fd &fdset
Fn FD_ISSET fd &fdset
Fn FD_ZERO &fdset
DESCRIPTION
Fn Select
examines the I/O descriptor sets whose addresses are passed in
Fa readfds ,
Fa writefds ,
and
Fa exceptfds
to see if some of their descriptors
are ready for reading, are ready for writing, or have an exceptional
condition pending, respectively.
The first
Fa nfds
descriptors are checked in each set;
i.e., the descriptors from 0 through
Fa nfds Ns No -1
in the descriptor sets are examined.
On return,
Fn select
replaces the given descriptor sets
with subsets consisting of those descriptors that are ready
for the requested operation.
Fn Select
returns the total number of ready descriptors in all the sets.
The descriptor sets are stored as bit fields in arrays of integers.
The following macros are provided for manipulating such descriptor sets:
Fn FD_ZERO &fdset
initializes a descriptor set
Fa fdset
to the null set.
Fn FD_SET fd &fdset
includes a particular descriptor
Fa fd
in
Fa fdset .
Fn FD_CLR fd &fdset
removes
Fa fd
from
Fa fdset .
Fn FD_ISSET fd &fdset
is non-zero if
Fa fd
is a member of
Fa fdset ,
zero otherwise.
The behavior of these macros is undefined if
a descriptor value is less than zero or greater than or equal to
FD_SETSIZE
which is normally at least equal
to the maximum number of descriptors supported by the system.
If
Fa timeout
is a non-nil pointer, it specifies a maximum interval to wait for the
selection to complete. If
Fa timeout
is a nil pointer, the select blocks indefinitely. To affect a poll, the
Fa timeout
argument should be non-nil, pointing to a zero-valued timeval structure.
Any of
Fa readfds ,
Fa writefds ,
and
Fa exceptfds
may be given as nil pointers if no descriptors are of interest.
RETURN VALUES
Fn Select
returns the number of ready descriptors that are contained in
the descriptor sets,
or -1 if an error occurred.
If the time limit expires,
Fn select
returns 0.
If
Fn select
returns with an error,
including one due to an interrupted call,
the descriptor sets will be unmodified.
ERRORS
An error return from
Fn select
indicates:
- Bq Er EBADF
-
One of the descriptor sets specified an invalid descriptor.
- Bq Er EINTR
-
A signal was delivered before the time limit expired and
before any of the selected events occurred.
- Bq Er EINVAL
-
The specified time limit is invalid. One of its components is
negative or too large.
SEE ALSO
accept(2),
connect(2),
getdtablesize(2),
gettimeofday(2),
read(2),
recv(2),
send(2),
write(2)
BUGS
Although the provision of
getdtablesize(2)
was intended to allow user programs to be written independent
of the kernel limit on the number of open files, the dimension
of a sufficiently large bit field for select remains a problem.
The default size
FD_SETSIZE
(currently 256) is somewhat larger than
the current kernel limit to the number of open files.
However, in order to accommodate programs which might potentially
use a larger number of open files with select, it is possible
to increase this size within a program by providing
a larger definition of
FD_SETSIZE
before the inclusion of
Aq Pa sys/types.h .
Fn Select
should probably return the time remaining from the original timeout,
if any, by modifying the time value in place.
This may be implemented in future versions of the system.
Thus, it is unwise to assume that the timeout value will be unmodified
by the
Fn select
call.
HISTORY
The
Fn select
function call appeared in
BSD 4.2
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- RETURN VALUES
-
- ERRORS
-
- SEE ALSO
-
- BUGS
-
- HISTORY
-
This document was created by
man2html,
using the manual pages.
Time: 19:41:54 GMT, December 25, 2022